package com.req;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.MultipartConfig;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.Part;

import java.io.IOException;
import java.util.Collection;

/**
 * 获取参数 ：
 * get ： 没有请求体 ， 所有参数都作为 查询字符串而存在
 * post ： 此时有请求体 ， 所有的内容都被放在了 请求体中
 * 字符数据 ：请求报头中content-type字段的取值为application/x-www-form-urlencoded时 ;
 *  就可以使用 request#getParameter 等系列方法获取参数
 * 字节数据 ：请求报头中content-type字段的取值为 multipart/form-data 时( 是上传文件时必须采用的方案) ;
 *  需要添加配置才可以使用 request#getParameter 等系列方法获取参数
 *  添加 @MultipartConfig 就可以 获取了 。
 *  注解 @MultipartConfig 与 web.xml 中的 标签： multipart-config 的效果一模一样
 *
 *
 *  上传文件，一定需要使用 post 方式 ， 且 编码必须为 multipart/form-data
 */
@WebServlet(urlPatterns = "/req5",name = "req5")
@MultipartConfig(location = "E:\\Download")
public class request5 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        throw new ServletException("上传文件必须使用post方式提交！！");
    }

    @Override
    protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");

        // 上传单个文件
        // 获取上传的内容 ( Servlet3.0 之后的内容)
//        Part file = req.getPart("file");
//        System.out.println(file);
//        String name = file.getSubmittedFileName();
//        System.out.println(name);

        // 可以将 文件 写出  ( 此时需要指定 写出文件时候的 路径 )
        //file.write((file.getSubmittedFileName()));

        // 上传多个文件
        Collection<Part> parts = req.getParts();
        System.out.println(parts);
        for (Part part : parts) {
            part.write(part.getSubmittedFileName());
        }
    }
}
